#include <iostream>
#include <string>
#include <vector>
#include <algorithm> // 算法头文件

using namespace std;
// 声明数据对象
typedef struct Elenemt_data
{
    string name; // 姓名
    string sex;  // 性别
    int age;     // 年纪
    int id;      // 学号
    int sco;     // 成绩
} Elenemt_data;

Elenemt_data stu[10] =
    {
        {"张1", "男", 18, 1, 59},
        {"张2", "男", 18, 1, 60},
        {"张3", "男", 18, 1, 70},
        {"张4", "男", 18, 1, 80},
        {"张5", "男", 18, 1, 90},
        {"张6", "男", 18, 1, 100}};

void print_Elenemt_data(Elenemt_data print_data)
{
    cout << "姓名:" << print_data.name << "   ";
    cout << "性别:" << print_data.sex << "   ";
    cout << "年纪:" << print_data.age << "   ";
    cout << "学号:" << print_data.id << "   ";
    cout << "成绩:" << print_data.sco << endl;
    return;
}

// 二元谓词
bool Sort_Elenemt_data(Elenemt_data data_1, Elenemt_data data_2)
{
    return data_1.sco > data_2.sco;
}

int main(int argc, char const *argv[])
{
    vector<Elenemt_data> v;
    for (size_t i = 0; i < 6; i++)
    {
        v.push_back(stu[i]);
    }
    // // 排序算法  Sort_Elenemt_data 调用二元谓词
    // sort(v.begin() , v.end() , Sort_Elenemt_data);
    // 打印
    for_each(v.begin(), v.end(), print_Elenemt_data);

    vector<Elenemt_data> v_2;
    for (size_t i = 0; i < 6; i++)
    {
        v_2.push_back(stu[i]);
    }

    // 打印
    for_each(v_2.begin(), v_2.end(), print_Elenemt_data);

    vector<Elenemt_data> v_3;

    // 合并前 必须扩容
    v_3.resize(v.size() + v_2.size());

    merge(v.begin(), v.end(), v_2.begin(), v_2.end(), v_3.begin(), Sort_Elenemt_data);

    // 打印
    for_each(v_3.begin(), v_3.end(), print_Elenemt_data);

    return 0;
}